/*
 * ViaClasses.h
 *
 *  Created on: Aug 22, 2013
 *      Author: root
 */

#ifndef VIACLASSES_H_
#define VIACLASSES_H_

#include "model/clases/ComponentClases.h"
#include "model/Via.h"

class ViaClasses: public Via, public ComponentClasses {

private:
	virtual void initializeConnectors();

public:
	enum TipoDeRelacionEntreClases {
		TipoDeRelacionEntreClasesAsociacion = 1,
		TipoDeRelacionEntreClasesHerencia,
		TipoDeRelacionEntreClasesComposicion,
		TipoDeRelacionEntreClasesAgregacion,
		TipoDeRelacionEntreClasesDependencia
	};

public:
	ViaClasses(unsigned exit = 0, const std::string & name = "", int orientation = 0);
	ViaClasses(const ViaClasses &);
	ViaClasses& operator=(const ViaClasses&);
	virtual ~ViaClasses();

	virtual void serialize(XmlWriter & writer_rep, XmlWriter & writer_comp);
	virtual void deserialize(XmlReader & reader);
	virtual void deserialize(XmlReader & reader, XmlReader & readerModel);
    virtual void validate(std::fstream & filestr, bool &valido) {};

    TipoDeRelacionEntreClases tipoDeRelacionEntreClases;

    std::string stringParaTipoDeRelacionEntreClases(TipoDeRelacionEntreClases tipo) {
    	switch (tipo) {
			case TipoDeRelacionEntreClasesHerencia:
				return "Herencia";
			case TipoDeRelacionEntreClasesComposicion:
				return "Composicion";
			case TipoDeRelacionEntreClasesAgregacion:
				return "Agregacion";
			case TipoDeRelacionEntreClasesAsociacion:
				return "Asociacion";
			case TipoDeRelacionEntreClasesDependencia:
				return "Dependencia";
			default:
				return "???";
		}
    }

    TipoDeRelacionEntreClases getTipoRelacion(int tipo) {
    	switch (tipo) {
			case 2: return TipoDeRelacionEntreClasesHerencia;
			case 3: return TipoDeRelacionEntreClasesComposicion;
			case 4: return TipoDeRelacionEntreClasesAgregacion;
			case 1: return TipoDeRelacionEntreClasesAsociacion;
			case 5: return TipoDeRelacionEntreClasesDependencia;
			default:
				return TipoDeRelacionEntreClasesAsociacion;
		}
    }
};

#endif /* VIACLASSES_H_ */
